﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dominio;
using Servicios;

namespace Indices
{
    public class IndexManager : IIndexManager
    {
        private static IndexManager instancia = new IndexManager();

        private ILogService logService = FabricaDeServicios.ObtenerInstancia().ObtenerLogService();

        private IMetodoIndexacionService metodoIndexacionService = FabricaDeServicios.ObtenerInstancia().ObtenerMetodoIndexacionService();

        private IUsuarioService usuarioService = FabricaDeServicios.ObtenerInstancia().ObtenerUsuarioService();

        private IIndexService indexService;

        private IndexManager()
            : base()
        {
            indexService = ObtenerServicioActivo();
        }

        public static IndexManager ObtenerInstancia()
        {
            return instancia;
        }

        public IList<FileSystemElement> Buscar(string keyword, string nombreUsuario)
        {

            IList<FileSystemElement> fileSystemElements = ObtenerServicioActivo().Buscar(keyword);

            Usuario usu = usuarioService.ObtenerUsuarioPorUserName(nombreUsuario);

            Log log = new Log();
            log.Accion = "Busqueda";
            log.Keyword = keyword;
            log.UsuarioId = usu.Id;
            logService.Registrar(log);

            return fileSystemElements;
        }

        private IIndexService ObtenerServicioActivo()
        {
            return metodoIndexacionService.ObtenerIndexServicePorMetodoIndexacion(
                metodoIndexacionService.ObtenerMetodoActivo());
        }

        public void SetIndexService(IIndexService indexService)
        {
            metodoIndexacionService.ActivarMetodoDeIndexacion(indexService);
            this.indexService = indexService;
        }
    }
}
